package com.slt.jvm.mashibing.c2_classloader;

/**
 * 严格讲应该叫lazy initialzing，java虚拟机规范并没有严格规定什么时候必须loading,但严格规定了什么时候initialzing
 */
public class T008_LazyLoading {
    public static void main(String[] args) throws Exception {
        //1.只是声明一下，并不会加载这个类。
        P p;

        //2.有new 类会被加载，并且也会加载他的父类
//        X x = new X();

        //3.调用 final static 变量 仍然不会初始化类
//        System.out.println(P.i);

        //4.调用  static 变量会初始化类
//        System.out.println(P.j);

        //5.手动加载这个类
        Class.forName("com.slt.jvm.mashibing.c2_classloader.T008_LazyLoading$P");

    }

    public static class P {
        final static int i = 8;
        static int j = 9;
        static {
            System.out.println("P");
        }
    }

    public static class X extends P {
        static {
            System.out.println("X");
        }
    }
}
